2026-10-14T21:56:00.6890666Z ##[group]Run npm run test:deploy
2026-10-14T21:56:00.6890710Z [36;1mnpm run test:deploy[0m
2026-10-14T21:56:00.6890726Z shell: /usr/bin/bash -e {0}
2026-10-14T21:56:00.6890737Z env:
2026-10-14T21:56:00.6890746Z   CARGO_TERM_COLOR: never
2026-10-14T21:56:00.6890854Z   CLOUDFLARE_ACCOUNT_ID: 1e6f2cffa3f445920836e8ebe446bb58
2026-10-14T21:56:00.6890869Z   WRANGLER_SEND_METRICS: false
2026-10-14T21:56:00.6890880Z ##[endgroup]
2026-10-14T21:56:00.8094024Z 
2026-10-14T21:56:00.8094150Z > test:deploy
2026-10-14T21:56:00.8094178Z > node --test "scripts/deploy/*.test.mjs"
2026-10-14T21:56:00.8094191Z 
2026-10-14T21:56:00.9362722Z ✔ a release's version bump keeps the Rust caches' key, a new dependency changes it (4.07809ms)
2026-10-14T21:56:00.9373542Z ✔ the toolchain is read from rustc -V (0.26354ms)
2026-10-14T21:56:00.9463125Z ✔ the CLI's builder image is pinned, and keys its cache by its digest (0.27249ms)
2026-10-14T21:56:00.9463346Z ✔ a unit's hash is read from its files and folders (0.3692ms)
2026-10-14T21:56:00.9463430Z ✔ only the units the build did not use are pruned (2.84823ms)
2026-10-14T21:56:02.5609162Z error: no matching package named `base64` found
2026-10-14T21:56:02.5609644Z location searched: crates.io index
2026-10-14T21:56:02.5609953Z required by package `g1t-api v0.1.0 (/home/runner/work/repo/apps/api)`
2026-10-14T21:56:02.5610199Z note: offline mode (via `--offline`) can sometimes cause surprising resolution failures
2026-10-14T21:56:02.5612264Z help: if this error is too confusing you may wish to retry without `--offline`
2026-10-14T21:56:03.0095602Z ✔ the manifest matches every wrangler config in the repository (36.116538ms)
2026-10-14T21:56:03.0095733Z ✔ every wrangler.jsonc is found, and only checked-in ones (27.010338ms)
2026-10-14T21:56:03.0096039Z ✔ problems are found: an unlisted config, a later-stage binding, a wrong database, an unnamed KV (34.927978ms)
2026-10-14T21:56:03.0096108Z ✔ stages follow bindings: nothing binds to a unit that ships after it (0.57212ms)
2026-10-14T21:56:03.0096167Z ✔ inside a stage, a Worker that does not exist yet goes before those bound to it (0.71875ms)
2026-10-14T21:56:03.0126609Z ✔ Rust workers build with the shared script and the same wasm-opt level (0.95115ms)
2026-10-14T21:56:03.0126846Z ✔ shared crates and packages are read from workspace metadata (0.55646ms)
2026-10-14T21:56:03.0126972Z ✔ the runner's image is built from the runner crate and what it uses, on the base its lock names (0.47236ms)
2026-10-14T21:56:03.0127148Z ✔ services/runner/base.json records the base its folder builds (12.077279ms)
2026-10-14T21:56:03.0127226Z ✔ an image's hash ignores line endings, and its tags say what they are (114.368743ms)
2026-10-14T21:56:03.0127298Z ✔ only the lockfile entries the runner is built from name its image (0.52451ms)
2026-10-14T21:56:03.0127447Z ✔ the runner's deploy config names its image by reference, beside its wrangler.jsonc (29.522039ms)
2026-10-14T21:56:03.0127517Z ✔ the registry is asked for an image's manifest, without Docker (1.21186ms)
2026-10-14T21:56:03.0127590Z ✔ a push counts only when it ends with a digest, and is tried again (1.116829ms)
2026-10-14T21:56:03.0127654Z ✔ a static Linux binary is told from a dynamic one (0.93907ms)
2026-10-14T21:56:03.0127741Z ﹣ path dependencies agree with Cargo's own resolved graph (1236.088057ms) # cargo metadata could not resolve offline
2026-10-14T21:56:03.0128326Z ✔ every import that leaves a unit's folder is covered by its dependencies or inputs (72.320485ms)
2026-10-14T21:56:03.0128418Z ✔ a shared crate's change reaches every unit built from it, and no other (0.71543ms)
2026-10-14T21:56:03.0128489Z ✔ a shared package's change reaches what imports it (0.25317ms)
2026-10-14T21:56:03.0128557Z ✔ a crate's tests, benches and examples deploy nothing (0.52984ms)
2026-10-14T21:56:03.0128626Z ✔ a Rust file compiled only for tests is found from what declares it (1.21204ms)
2026-10-14T21:56:03.0128694Z ✔ this repository's test-only sources are read from git (302.876612ms)
2026-10-14T21:56:03.0128763Z ✔ decide: a change only to tests deploys nothing (4.17261ms)
2026-10-14T21:56:03.0128825Z ✔ own folders, declared inputs and root files (2.61986ms)
2026-10-14T21:56:03.0128890Z ✔ a Cargo.lock change reaches only crates that use what changed (1.73284ms)
2026-10-14T21:56:03.0128948Z ✔ a package-lock change reaches through workspace links (0.605149ms)
2026-10-14T21:56:03.0129011Z ✔ decide: changed units deploy, others wait, unknown ones deploy (0.446149ms)
2026-10-14T21:56:03.0129077Z ✔ decide: --force deploys unchanged units; a commit missing from history deploys (0.252109ms)
2026-10-14T21:56:03.0129138Z ✔ decide: Cargo.lock counts only where it reaches (0.575029ms)
2026-10-14T21:56:03.0129206Z ✔ decide: the runner's image rebuilds only when what it is built from changed (0.290069ms)
2026-10-14T21:56:03.0129527Z ✔ the plan as data: migrations, and each stage's units in jobs that share a build (2.558709ms)
2026-10-14T21:56:03.0129850Z ✔ units are picked by short name, folder or Worker name (0.78399ms)
2026-10-14T21:56:03.0130447Z ✔ a CI job installs only what its units need (1.26906ms)
2026-10-14T21:56:03.0130532Z ✔ a deploy is annotated with its commit, and read back (0.42904ms)
2026-10-14T21:56:03.0130839Z ✔ the live commit: the live version's, looking through secret changes (0.53171ms)
2026-10-14T21:56:03.0130923Z ✔ Wrangler's output: pending migrations and the version a deploy made (0.39696ms)
2026-10-14T21:56:03.0130975Z ✔ the API's answers: the live commit as Wrangler's would give it (1.25432ms)
2026-10-14T21:56:03.4679133Z ✔ the API's answers: a Worker never deployed, and a refusal, never throw (502.07904ms)
2026-10-14T21:56:03.4689360Z ✔ the API is used only with the token Wrangler would be given (0.7328ms)
2026-10-14T21:56:03.4689505Z ✔ pending migrations: the folder's files less the names in d1_migrations (2.26786ms)
2026-10-14T21:56:03.5593560Z ✔ the pool runs everything, no more than its limit at once (16.385859ms)
2026-10-14T21:56:03.5618327Z ✔ self-hosting builds every Rust service the manifest says it runs (0.7081ms)
2026-10-14T21:56:03.5618469Z ✔ the self-hosting architecture page names every unit (0.63958ms)
2026-10-14T21:56:03.5618555Z ✔ the architecture's services page names every unit, with the services it binds to (3.32787ms)
2026-10-14T21:56:03.5618636Z ✔ resolveStack works on a manifest with no workspace crates or packages (13.706059ms)
2026-10-14T21:56:03.5618732Z ✔ decide: a commit older than what runs is never deployed by accident, even forced; --rollback means it (1.9761ms)
2026-10-14T21:56:03.5618807Z ✔ a deploy by hand reports to the repository on g1t, and a workflow's does not (4.910829ms)
2026-10-14T21:56:03.5618893Z ✔ a failed wrangler command is reported by its error, not its trace (0.30191ms)
2026-10-14T21:56:03.5679117Z ✔ Cloudflare failing is tried again; a mistake in what is deployed is not (0.48745ms)
2026-10-14T21:56:03.5679722Z ✔ sandboxes roll over at once when their image or container settings changed, and not otherwise (0.39086ms)
2026-10-14T21:56:03.5687149Z ✔ the deploy tool itself parses: a test that never imports it would not notice (50.328387ms)
2026-10-14T21:56:04.0071770Z ✔ the statements are all there (1.050469ms)
2026-10-14T21:56:04.0071894Z ✔ twenty invites each: the twenty-first is refused in the statement that writes (44.871107ms)
2026-10-14T21:56:04.0071977Z ✔ revoking an unused invite gives it back; an expired one never counted (84.881725ms)
2026-10-14T21:56:04.0072038Z ✔ a used invite is spent: revoking it does nothing and it still counts (44.532467ms)
2026-10-14T21:56:04.0072090Z ✔ a pending invite for the same address is found; a revoked one is not (38.150228ms)
2026-10-14T21:56:04.0072142Z ✔ staff grants add to the twenty and can take some back (42.173457ms)
2026-10-14T21:56:04.0072190Z ✔ signing up from the link spends the invite once and records who invited whom (40.262798ms)
2026-10-14T21:56:04.0356107Z ✔ a body that broke off is worth another try, a lockfile out of step is not (1.5441ms)
2026-10-14T21:56:04.0365986Z ✔ an install that ends without saying why, or stalls, is tried again (0.198169ms)
2026-10-14T21:56:04.0375519Z ✔ a dropped connection is tried again until the install passes (1.17601ms)
2026-10-14T21:56:04.0416924Z ✔ a real error fails at once (0.29651ms)
2026-10-14T21:56:04.0417066Z ✔ it gives up after its tries, with npm's exit code (0.41287ms)
2026-10-14T21:56:04.0417095Z ✔ a stalled install is run again (0.39179ms)
2026-10-14T21:56:04.2003430Z ✔ webhooks: the hourly purge deletes old deliveries by time (2.280409ms)
2026-10-14T21:56:04.2004558Z ✔ billing: this month's users are read from an index, not the ledger (56.178986ms)
2026-10-14T21:56:04.2005458Z ✔ events: a repository's events of one type, newest first, page by page (3.99161ms)
2026-10-14T21:56:04.2011110Z ✔ actions: a self-hosted runner's poll finds queued jobs by namespace, whatever its case (18.141639ms)
2026-10-14T21:56:04.2011464Z ✔ chat: a channel's messages and a thread's replies, newest first, page by page (2.80502ms)
2026-10-14T21:56:04.2011563Z ✔ chat: the sidebar's unread messages are read from each channel's index, after the last read (2.98244ms)
2026-10-14T21:56:04.2011627Z ✔ chat: a page's reactions are read by message, and a workspace's emoji by name (2.620499ms)
2026-10-14T21:56:04.3192637Z ✔ the runner's layer is the binary alone, at its path and mode, owned by root (5.45491ms)
2026-10-14T21:56:04.3220977Z ✔ the layer and entrypoint are what services/runner/Dockerfile builds (0.501989ms)
2026-10-14T21:56:04.3221122Z ✔ the config is the base's, with the layer, the entrypoint and no inherited command (0.89177ms)
2026-10-14T21:56:04.3221207Z ✔ the manifest names the base's layers, then the binary's, in the base's format (0.31658ms)
2026-10-14T21:56:04.3221277Z ✔ image references and bearer challenges are read (0.62515ms)
2026-10-14T21:56:04.3221371Z ✔ the runner's image is made in the registry from the base's manifest and one new layer, pulling none of the base (31.113169ms)
2026-10-14T21:56:04.3221449Z ✔ a base that is not where it should be, or not what base.json says, stops it (1.30467ms)
2026-10-14T21:56:04.3221544Z ✔ a registry that asks for a bearer token is given the one its realm trades the credentials for (2.13426ms)
2026-10-14T21:56:04.3951012Z scheduler: g1t-webhooks (* * * * *) is still running from the last time; skipped
2026-10-14T21:56:04.4280262Z scheduler: g1t-webhooks (* * * * *): 200 {"outcome":"exception"}
2026-10-14T21:56:04.4317906Z ✔ fields read numbers, ranges, lists and steps (2.26886ms)
2026-10-14T21:56:04.4327471Z ✔ the services' crons match when hosted g1t's would fire (4.97657ms)
2026-10-14T21:56:04.4351763Z ✔ what is due is each matching cron of each service (0.63936ms)
2026-10-14T21:56:04.4374375Z ✔ a run asks Wrangler for the handler, and a slow one is not doubled (34.426129ms)
2026-10-14T21:56:04.5503676Z ✔ a deploy is announced to status.g1t.sh with the token, and without one nothing is sent (42.750368ms)
2026-10-14T21:56:04.5523704Z ✔ an announcement that fails is a warning, never a failed deploy (0.8083ms)
2026-10-14T21:56:04.5529312Z ✔ the stages run inside the window: started before, finished after, even when they throw; a dry run says nothing (0.77396ms)
2026-10-14T21:56:04.5531301Z ✔ deploy.mjs announces every deploy, and the workflow passes it the token (0.737329ms)
2026-10-14T21:56:04.5654835Z ℹ tests 92
2026-10-14T21:56:04.5655139Z ℹ suites 0
2026-10-14T21:56:04.5655531Z ℹ pass 91
2026-10-14T21:56:04.5655801Z ℹ fail 0
2026-10-14T21:56:04.5655964Z ℹ cancelled 0
2026-10-14T21:56:04.5656370Z ℹ skipped 1
2026-10-14T21:56:04.5656612Z ℹ todo 0
2026-10-14T21:56:04.5656778Z ℹ duration_ms 3713.496549
